#ifndef _LCD_ST7735S_H_
#define _LCD_ST7735S_H_

/*----------------------------Head file----------------------------*/
#include "stdint.h"
#include "stdbool.h"

/*----------------------------macro file---------------------------*/

/*----------------------------type define--------------------------*/
typedef void (*st7735s_set_rst_fptr_t)(bool enable);
typedef void (*st7735s_set_dc_fptr_t)(bool enable);
typedef void (*st7735s_set_bl_fptr_t)(bool enable);
typedef void (*st7735s_tx_data_block_fptr_t)(const uint8_t *data, int len);
typedef void (*st7735s_tx_data_noblock_fptr_t)(const uint8_t *data, int len);
typedef void (*st7735s_delay_fptr_t)(uint32_t period);
typedef void (*st7735s_tx_wait_fptr_t)(void);
typedef void (*st7735s_tx_done_fptr_t)(void);

struct st7735s_dev {
    st7735s_set_rst_fptr_t          set_rst;
    st7735s_set_dc_fptr_t           set_dc;
    st7735s_set_bl_fptr_t           set_backlight;
    st7735s_delay_fptr_t            delay_ms;
    st7735s_tx_data_block_fptr_t    tx_data_block;
    st7735s_tx_data_noblock_fptr_t  tx_data_noblock;
    st7735s_tx_wait_fptr_t          tx_wait;
    st7735s_tx_done_fptr_t          tx_done;
};

/*--------------------------var declarative------------------------*/

/*-------------------------func declarative------------------------*/
extern int lcd_st7735s_init(struct st7735s_dev *dev);
extern void lcd_st7735s_flush(struct st7735s_dev *dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint8_t *buf);
extern void lcd_st7735s_set_win(struct st7735s_dev *dev, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
extern void lcd_st7735s_send_data_block(struct st7735s_dev *dev, const uint8_t *data, int len);
extern void lcd_st7735s_send_data_noblock(struct st7735s_dev *dev, const uint8_t *data, int len);

/*-----------------------------------------------------------------*/


#endif // _LCD_ST7735S_H_

